package Control;

import Clases.Aguinaldo;
import Clases.Liquidacion;
import Clases.Pago;
import Gestor.GestorPago;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;

public class ControlPago {

    private static ControlPago instancia = null;
    private final GestorPago gestorP = GestorPago.obtenerInstancia();
    java.util.Date fechaInicioPago = null;
    java.util.Date fechaFinPago = null;

    public static ControlPago obtenerInstancia() {
        if (instancia == null) {
            instancia = new ControlPago();
        }
        return instancia;
    }

    public ArrayList<java.util.Date> getPago() {
        ArrayList fechas = new ArrayList<java.util.Date>();
        fechas.add(fechaInicioPago);
        fechas.add(fechaFinPago);
        return fechas;
    }

    private ControlPago() {
        Calendar cal = Calendar.getInstance();
        int dia = cal.get(Calendar.DAY_OF_MONTH);
        if (dia < 16) {
            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1);
            fechaInicioPago = cal.getTime();
            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 15);
            fechaFinPago = cal.getTime();
        } else {
            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 16);
            fechaInicioPago = cal.getTime();
            cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.getActualMaximum(Calendar.DAY_OF_MONTH));
            fechaFinPago = cal.getTime();
        }
    }

    public ArrayList<Pago> getPagosPorNumEmpleado(long numEmpleado) {
        return gestorP.getPagosPorNumEmpleado(numEmpleado);
    }

    public void guardarLiquidacionCesantia(Liquidacion liquidacion) {
        gestorP.insertar(liquidacion);
    }

    public ArrayList<Liquidacion> obtenerListaLiquidaciones() {
        return gestorP.obtenerListaLiquidaciones();
    }

    public boolean modificarPago(Pago pago) {
        return gestorP.actualizar(pago);
    }

    public Pago getPagoActual(long numEmpleado, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorP.getPagoPorCedula(numEmpleado, fechaPagoInicio, fechaPagoFin);
    }

    public ArrayList<Aguinaldo> obtenerListaAguinaldos() {
        return gestorP.obtenerListaAguinaldos();
    }

    public Object insertarAguinaldo(Aguinaldo aguinaldo) {
        return gestorP.insertarAguinaldo(aguinaldo);
    }

    public ArrayList<Pago> getPagosHistoricos(long numEmpleado, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorP.getPagosHistoricos(numEmpleado, fechaPagoInicio, fechaPagoFin);
    }

    public ArrayList<Pago> getPagoEmpleado(long numEmpleado) {
        return gestorP.getPagoEmpleado(numEmpleado);
    }

    public void eliminarPago(Pago pago) {
        gestorP.eliminar(pago);
    }

    public int getCantHorasExtras(long numEmpleado, Date fechaPagoInicio, Date fechaPagoFin) {
        return gestorP.getCantHorasExtras(numEmpleado, fechaPagoInicio, fechaPagoFin);
    }
    public boolean generarPlanilla(){
        return gestorP.generarPlanilla();
    }
}
